home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / include / complex.h < prev    next >
C/C++ Source or Header  |  2008-09-29  |  4KB  |  115 lines

  1. /* Copyright (C) 1997, 1998, 1999, 2000, 2006 Free Software Foundation, Inc.
  2.    This file is part of the GNU C Library.
  3.  
  4.    The GNU C Library is free software; you can redistribute it and/or
  5.    modify it under the terms of the GNU Lesser General Public
  6.    License as published by the Free Software Foundation; either
  7.    version 2.1 of the License, or (at your option) any later version.
  8.  
  9.    The GNU C Library is distributed in the hope that it will be useful,
  10.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12.    Lesser General Public License for more details.
  13.  
  14.    You should have received a copy of the GNU Lesser General Public
  15.    License along with the GNU C Library; if not, write to the Free
  16.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  17.    02111-1307 USA.  */
  18.  
  19. /*
  20.  *    ISO C99:  7.3 Complex arithmetic    <complex.h>
  21.  */
  22.  
  23. #ifndef _COMPLEX_H
  24. #define _COMPLEX_H    1
  25.  
  26. #include <features.h>
  27.  
  28. /* Get general and ISO C99 specific information.  */
  29. #include <bits/mathdef.h>
  30.  
  31. __BEGIN_DECLS
  32.  
  33. /* We might need to add support for more compilers here.  But since ISO
  34.    C99 is out hopefully all maintained compilers will soon provide the data
  35.    types `float complex' and `double complex'.  */
  36. #if __GNUC_PREREQ (2, 7) && !__GNUC_PREREQ (2, 97)
  37. # define _Complex __complex__
  38. #endif
  39.  
  40. #define complex        _Complex
  41.  
  42. /* Narrowest imaginary unit.  This depends on the floating-point
  43.    evaluation method.
  44.    XXX This probably has to go into a gcc related file.  */
  45. #define _Complex_I    (__extension__ 1.0iF)
  46.  
  47. /* Another more descriptive name is `I'.
  48.    XXX Once we have the imaginary support switch this to _Imaginary_I.  */
  49. #undef I
  50. #define I _Complex_I
  51.  
  52. /* The file <bits/cmathcalls.h> contains the prototypes for all the
  53.    actual math functions.  These macros are used for those prototypes,
  54.    so we can easily declare each function as both `name' and `__name',
  55.    and can declare the float versions `namef' and `__namef'.  */
  56.  
  57. #define __MATHCALL(function, args)    \
  58.   __MATHDECL (_Mdouble_complex_,function, args)
  59. #define __MATHDECL(type, function, args) \
  60.   __MATHDECL_1(type, function, args); \
  61.   __MATHDECL_1(type, __CONCAT(__,function), args)
  62. #define __MATHDECL_1(type, function, args) \
  63.   extern type __MATH_PRECNAME(function) args __THROW
  64.  
  65. #define _Mdouble_         double
  66. #define __MATH_PRECNAME(name)    name
  67. #include <bits/cmathcalls.h>
  68. #undef    _Mdouble_
  69. #undef    __MATH_PRECNAME
  70.  
  71. /* Now the float versions.  */
  72. #ifndef _Mfloat_
  73. # define _Mfloat_        float
  74. #endif
  75. #define _Mdouble_         _Mfloat_
  76. #ifdef __STDC__
  77. # define __MATH_PRECNAME(name)    name##f
  78. #else
  79. # define __MATH_PRECNAME(name)    name/**/f
  80. #endif
  81. #include <bits/cmathcalls.h>
  82. #undef    _Mdouble_
  83. #undef    __MATH_PRECNAME
  84.  
  85. /* And the long double versions.  It is non-critical to define them
  86.    here unconditionally since `long double' is required in ISO C99.  */
  87. #if (__STDC__ - 0 || __GNUC__ - 0) \
  88.     && (!defined __NO_LONG_DOUBLE_MATH || defined __LDBL_COMPAT)
  89. # ifdef __LDBL_COMPAT
  90. #  undef __MATHDECL_1
  91. #  define __MATHDECL_1(type, function, args) \
  92.   extern type __REDIRECT_NTH(__MATH_PRECNAME(function), args, function)
  93. # endif
  94.  
  95. # ifndef _Mlong_double_
  96. #  define _Mlong_double_    long double
  97. # endif
  98. # define _Mdouble_         _Mlong_double_
  99. # ifdef __STDC__
  100. #  define __MATH_PRECNAME(name)    name##l
  101. # else
  102. #  define __MATH_PRECNAME(name)    name/**/l
  103. # endif
  104. # include <bits/cmathcalls.h>
  105. #endif
  106. #undef    _Mdouble_
  107. #undef    __MATH_PRECNAME
  108. #undef    __MATHDECL_1
  109. #undef    __MATHDECL
  110. #undef    __MATHCALL
  111.  
  112. __END_DECLS
  113.  
  114. #endif /* complex.h */
  115.